Skip to main content
Glama
[root-of-the-server]__a562bc8e._.js16.7 kB
module.exports=[9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},36313,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HooksClientContext},18341,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ServerInsertedHtml},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},35112,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactDOM},54799,(a,b,c)=>{b.exports=a.x("crypto",()=>require("crypto"))},24836,(a,b,c)=>{b.exports=a.x("https",()=>require("https"))},31489,a=>{"use strict";a.i(63450);var b=a.i(33128),c=a.i(22531),d=a.i(80997),e=a.i(43143),f=a.i(80110);a.s(["BSM",0,b,"ECIES",()=>e.default,"HD",()=>c.default,"Mnemonic",()=>d.default,"fromUtxo",()=>f.default])},21612,a=>{"use strict";a.i(65998);var b=a.i(15778),c=a.i(48111),d=a.i(9215),e=a.i(72922),f=a.i(72216),g=a.i(41363);a.s(["LockingScript",()=>d.default,"OP",()=>b.default,"P2PKH",()=>g.P2PKH,"PushDrop",()=>g.PushDrop,"RPuzzle",()=>g.RPuzzle,"Script",()=>c.default,"Spend",()=>f.default,"UnlockingScript",()=>e.default])},92724,a=>{"use strict";a.i(66406);var b=a.i(76735),c=a.i(42575),d=a.i(86864),e=a.i(91512);a.s(["ARC",()=>b.default,"Teranode",()=>d.default,"WhatsOnChainBroadcaster",()=>c.default,"defaultBroadcaster",()=>e.defaultBroadcaster])},67796,a=>{"use strict";a.i(39066);var b=a.i(79289),c=a.i(27921),d=a.i(96892),e=a.i(25721),f=a.i(43337),g=a.i(6982);a.s(["ATOMIC_BEEF",()=>f.ATOMIC_BEEF,"BEEF_V1",()=>f.BEEF_V1,"BEEF_V2",()=>f.BEEF_V2,"Beef",()=>f.Beef,"BeefParty",()=>g.default,"BeefTx",()=>e.default,"MerklePath",()=>c.default,"TX_DATA_FORMAT",()=>f.TX_DATA_FORMAT,"Transaction",()=>b.default,"isBroadcastFailure",()=>d.isBroadcastFailure,"isBroadcastResponse",()=>d.isBroadcastResponse])},23159,60725,a=>{"use strict";a.i(8118);var b=a.i(35581);a.s(["SatoshisPerKilobyte",()=>b.default],23159),a.i(98118);var c=a.i(43172),d=a.i(15515),e=a.i(18792),f=a.i(83818);a.s(["FetchHttpClient",()=>f.FetchHttpClient,"NodejsHttpClient",()=>e.NodejsHttpClient,"binaryHttpClient",()=>d.binaryHttpClient,"defaultHttpClient",()=>c.defaultHttpClient],60725)},78219,a=>{"use strict";a.i(47784);var{toArray:b,toBase64:c}=a.i(61101).Utils;async function d(a,c,e=6e5){let f=Uint8Array.from(b(a,"utf8")),g=await globalThis.crypto.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);return globalThis.crypto.subtle.deriveKey({name:"PBKDF2",salt:c,iterations:e,hash:"SHA-256"},g,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function e(a,b,e){let f=globalThis.crypto.getRandomValues(new Uint8Array(16)),g=globalThis.crypto.getRandomValues(new Uint8Array(12)),h=await d(b,f,e),i=JSON.stringify({...a,createdAt:a.createdAt||new Date().toISOString()}),j=new TextEncoder().encode(i),k=await globalThis.crypto.subtle.encrypt({name:"AES-GCM",iv:g},h,j),l=new Uint8Array(f.length+g.length+k.byteLength);return l.set(f,0),l.set(g,f.length),l.set(new Uint8Array(k),f.length+g.length),c(Array.from(l))}async function f(a,c,e){let f;try{f=b(a,"base64")}catch(a){throw console.error("Failed to decode base64 string (toArray threw):",a),Error("Decryption failed: Invalid Base64 input.")}if(a.length>0&&0===f.length)throw Error("Decryption failed: Invalid Base64 input (decoded to empty).");let g=Uint8Array.from(f);if(g.length<28)throw Error("Decryption failed: Encrypted data is too short.");let h=g.slice(0,16),i=g.slice(16,28),j=g.slice(28),k="number"==typeof e?[e]:Array.isArray(e)?e:[6e5,1e5],l=null;for(let a of k)try{let b=await d(c,h,a),e=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:i},b,j),f=new TextDecoder().decode(e);try{let a=JSON.parse(f);if("object"==typeof a&&null!==a&&("xprv"in a&&"ids"in a&&"mnemonic"in a||"rootPk"in a&&"ids"in a||"wif"in a&&"id"in a||"ordPk"in a&&"payPk"in a&&"identityPk"in a||"wif"in a&&!("id"in a)&&!("xprv"in a)&&!("rootPk"in a)))return a;throw Error("Invalid backup structure after JSON parse.")}catch(a){if(a instanceof SyntaxError)return{wif:f};throw a}}catch(a){if(l=a,a instanceof DOMException&&"OperationError"===a.name)continue;throw a}if(console.error("All decryption attempts failed. Last error:",l),l&&"OperationError"===l.name)throw Error("Decryption failed: Invalid passphrase or corrupted data across all attempted iteration counts.");throw l||Error("Decryption failed: Invalid passphrase or corrupted data across all attempted iteration counts.")}async function g(a,b,c){if(!(a&&"object"==typeof a&&("xprv"in a&&"string"==typeof a.xprv&&"ids"in a&&"string"==typeof a.ids&&"mnemonic"in a&&"string"==typeof a.mnemonic||"rootPk"in a&&"string"==typeof a.rootPk&&"ids"in a&&"string"==typeof a.ids&&!("xprv"in a)||"wif"in a&&"string"==typeof a.wif&&"id"in a&&"string"==typeof a.id||"wif"in a&&"string"==typeof a.wif&&!("id"in a)&&!("xprv"in a)&&!("rootPk"in a)||"ordPk"in a&&"string"==typeof a.ordPk&&"payPk"in a&&"string"==typeof a.payPk&&"identityPk"in a&&"string"==typeof a.identityPk)))throw Error("Invalid payload: Payload must be an object matching BapMasterBackup, BapMemberBackup, WifBackup, or OneSatBackup structure.");if("string"!=typeof b||0===b.length)throw Error("Invalid passphrase: Passphrase must be a non-empty string.");if(b.length<8)throw Error("Invalid passphrase: Passphrase must be at least 8 characters long.");return e(a,b,c)}async function h(a,b,c){if("string"!=typeof a||0===a.length)throw Error("Invalid encryptedString: Must be a non-empty string.");if("string"!=typeof b||0===b.length)throw Error("Invalid passphrase: Passphrase must be a non-empty string.");return f(a,b,c)}a.s(["DEFAULT_PBKDF2_ITERATIONS",()=>6e5,"LEGACY_PBKDF2_ITERATIONS",()=>1e5,"RECOMMENDED_PBKDF2_ITERATIONS",()=>6e5,"decryptBackup",()=>h,"encryptBackup",()=>g])},81202,a=>{"use strict";var b=a.i(87924),c=a.i(72131);class d{constructor(){this.provider=null,this.isInstalled=!1,this.isConnected=!1,this.publicKey=null,this.listeners=new Map,this.checkInstallation(),this.setupEventListeners()}checkInstallation(){this.isInstalled=!1,this.isInstalled&&window.yours&&(this.provider=window.yours)}setupEventListeners(){if(!this.provider)return;let a=()=>{this.publicKey=null,this.isConnected=!1,this.emit("disconnected")},b=()=>{this.publicKey=null,this.isConnected=!1,this.emit("disconnected")};this.provider.on("switchAccount",a),this.provider.on("signedOut",b)}isWalletInstalled(){return this.isInstalled}async connect(){if(!this.isInstalled||!this.provider)return{success:!1,error:"Yours Wallet not installed. Please install from Chrome Web Store."};try{let a=await this.provider.connect();return this.publicKey=a,this.isConnected=!0,this.emit("connected"),{success:!0,publicKey:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to connect to Yours Wallet"}}}async disconnect(){if(this.provider)try{await this.provider.disconnect(),this.publicKey=null,this.isConnected=!1,this.emit("disconnected")}catch(a){console.error("Error disconnecting from Yours Wallet:",a)}}getPublicKey(){return this.publicKey}isWalletConnected(){return this.isConnected&&!!this.publicKey}async getBalance(){if(!this.provider||!this.isConnected)return null;try{return await this.provider.getBalance()}catch(a){return console.error("Error getting balance:",a),null}}on(a,b){this.listeners.has(a)||this.listeners.set(a,new Set),this.listeners.get(a)?.add(b)}off(a,b){let c=this.listeners.get(a);c&&c.delete(b)}emit(a){let b=this.listeners.get(a);if(b)for(let a of b)a()}}function e(){let[a]=c.default.useState(()=>new d),[b,e]=c.default.useState(a.isWalletInstalled()),[f,g]=c.default.useState(a.isWalletConnected()),[h,i]=c.default.useState(a.getPublicKey()),[j,k]=c.default.useState(null);c.default.useEffect(()=>{let b=()=>{g(!0),i(a.getPublicKey()),a.getBalance().then(k).catch(console.error)},c=()=>{g(!1),i(null),k(null)};return a.on("connected",b),a.on("disconnected",c),()=>{a.off("connected",b),a.off("disconnected",c)}},[a]);let l=c.default.useCallback(async()=>await a.connect(),[a]),m=c.default.useCallback(async()=>{await a.disconnect()},[a]),n=c.default.useCallback(async()=>{f&&k(await a.getBalance())},[a,f]);return{isInstalled:b,isConnected:f,publicKey:h,balance:j,connect:l,disconnect:m,refreshBalance:n,provider:a}}async function f(){let a=new d;if(!a.isWalletInstalled())return{success:!1,error:"Yours Wallet not installed. Please install from Chrome Web Store."};try{let b=await a.connect();if(!b.success)return b;let c=b.publicKey;if(!c)return{success:!1,error:"Failed to get public key from wallet connection"};let d=globalThis.crypto.getRandomValues(new Uint8Array(32)),e=Array.from(d).map(a=>a.toString(16).padStart(2,"0")).join(""),f=await fetch("/api/auth/yours/oauth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({publicKey:c,challenge:e,provider:"yours"})});if(!f.ok)return{success:!1,error:"OAuth authentication with backend failed"};let g=await f.json(),h=await a.getBalance();return{success:!0,idKey:g.idKey,encryptedBackup:g.encryptedBackup,oauthToken:g.oauthToken,profile:{address:g.address,publicKey:c,balance:h||void 0}}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Unknown error occurred"}}finally{await a.disconnect()}}function g({onInstalled:a,className:c=""}){return(0,b.jsx)("div",{className:`text-center space-y-4 ${c}`,children:(0,b.jsxs)("div",{className:"p-4 bg-purple-900/20 border border-purple-500/30 rounded-lg",children:[(0,b.jsx)("h3",{className:"text-lg font-semibold text-purple-300 mb-2",children:"Yours Wallet Required"}),(0,b.jsx)("p",{className:"text-gray-300 text-sm mb-4",children:"To use Yours Wallet authentication, please install the browser extension."}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("button",{type:"button",onClick:()=>{window.open("https://chromewebstore.google.com/detail/yours-wallet/mlbnicldlpdimbjdcncnklfempedeipj","_blank")},className:"w-full px-4 py-2 bg-purple-600 hover:bg-purple-700 text-white rounded-lg transition-colors",children:"Install Yours Wallet"}),(0,b.jsx)("button",{type:"button",onClick:()=>{setTimeout(()=>{},1e3)},className:"w-full px-4 py-2 bg-gray-600 hover:bg-gray-700 text-white rounded-lg transition-colors",children:"I've Installed It"})]})]})})}a.s(["YoursInstallPrompt",()=>g,"YoursWalletProvider",()=>d,"createYoursAuthHandler",()=>f,"useYoursWallet",()=>e])},42301,a=>{"use strict";var b=a.i(87924),c=a.i(72131);class d{constructor(a){this.listeners=new Set,this.config=a,this.state={isConnected:!1,authToken:null,profile:null,error:null,isLoading:!1}}getOAuthUrl(){let a="iae"===this.config.environment?"https://iae-app.handcash.io":"https://app.handcash.io",b=this.config.redirectUrl||"/auth/handcash/callback",c=new globalThis.URLSearchParams({app:this.config.appId,redirectUrl:b});return`${a}/oauth/authorize?${c.toString()}`}async startOAuth(){this.setState({isLoading:!0,error:null});try{throw Date.now(),globalThis.crypto.getRandomValues(new Uint8Array(16)).toString(),Error("Cannot redirect to HandCash during server-side rendering")}catch(a){this.setState({isLoading:!1,error:a instanceof Error?a.message:"Failed to start OAuth flow"})}}async handleCallback(a){if(!a)return this.setState({error:"No auth token received",isLoading:!1}),!1;this.setState({isLoading:!0,error:null});try{let b=await this.getProfile(a);return this.setState({isConnected:!0,authToken:a,profile:b,isLoading:!1,error:null}),!0}catch(a){return this.setState({isLoading:!1,error:a instanceof Error?a.message:"Failed to verify auth token"}),!1}}async getProfile(a){let b=await fetch("/api/auth/handcash/profile",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({authToken:a})});if(!b.ok)throw Error("Failed to fetch profile");return await b.json()}async encryptData(a){if(!this.state.authToken)throw Error("Not authenticated");let b=await fetch("/api/auth/handcash/encrypt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({authToken:this.state.authToken,data:a})});if(!b.ok)throw Error("Failed to encrypt data");return(await b.json()).encryptedData}async decryptData(a){if(!this.state.authToken)throw Error("Not authenticated");let b=await fetch("/api/auth/handcash/decrypt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({authToken:this.state.authToken,encryptedData:a})});if(!b.ok)throw Error("Failed to decrypt data");return JSON.parse((await b.json()).decryptedData)}async disconnect(){this.setState({isConnected:!1,authToken:null,profile:null,error:null,isLoading:!1})}getState(){return{...this.state}}subscribe(a){return this.listeners.add(a),()=>this.listeners.delete(a)}setState(a){for(let b of(this.state={...this.state,...a},this.listeners))b(this.state)}}function e(a){let[b]=c.default.useState(()=>new d(a)),[e,f]=c.default.useState(b.getState());c.default.useEffect(()=>b.subscribe(f),[b]);let g=c.default.useCallback(async()=>{await b.startOAuth()},[b]),h=c.default.useCallback(async a=>await b.handleCallback(a),[b]),i=c.default.useCallback(async a=>await b.encryptData(a),[b]),j=c.default.useCallback(async a=>await b.decryptData(a),[b]),k=c.default.useCallback(async()=>{await b.disconnect()},[b]);return{...e,startOAuth:g,handleCallback:h,encryptData:i,decryptData:j,disconnect:k,provider:b}}async function f(a){try{if(a.code){let b=await fetch("/api/auth/handcash/oauth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({authorizationCode:a.code,provider:"handcash",state:a.state})});if(!b.ok)return{success:!1,error:"Failed to complete HandCash OAuth authentication"};let c=await b.json();return{success:!0,authToken:c.authToken,oauthToken:c.oauthToken,idKey:c.idKey,encryptedBackup:c.encryptedBackup,profile:{handle:c.profile.handle,displayName:c.profile.displayName,paymail:c.profile.paymail,avatarUrl:c.profile.avatarUrl,address:c.profile.address}}}return{success:!1,error:"HandCash OAuth flow must be initiated from the frontend"}}catch(a){return{success:!1,error:a instanceof Error?a.message:"HandCash authentication failed"}}}function g({onConnect:a,className:c="",config:d}){let{startOAuth:f,isLoading:g,error:h}=e(d),i=async()=>{await f(),a?.()};return(0,b.jsx)("div",{className:`text-center space-y-4 ${c}`,children:(0,b.jsxs)("div",{className:"p-4 bg-green-900/20 border border-green-500/30 rounded-lg",children:[(0,b.jsx)("div",{className:"w-12 h-12 bg-green-600 rounded-full flex items-center justify-center mx-auto mb-3",children:(0,b.jsxs)("svg",{className:"w-6 h-6",viewBox:"0 0 24 24",children:[(0,b.jsx)("title",{children:"HandCash"}),(0,b.jsx)("path",{fill:"white",d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1.5 15h-3v-2h3v2zm0-3h-3V7h3v7z"})]})}),(0,b.jsx)("h3",{className:"text-lg font-semibold text-green-300 mb-2",children:"Connect with HandCash"}),(0,b.jsx)("p",{className:"text-gray-300 text-sm mb-4",children:"Connect your HandCash wallet to authenticate and manage your Bitcoin identity."}),h&&(0,b.jsx)("div",{className:"mb-4 p-3 bg-red-900/20 border border-red-500/30 rounded text-red-300 text-sm",children:h}),(0,b.jsx)("button",{type:"button",onClick:i,disabled:g,className:"w-full px-4 py-2 bg-green-600 hover:bg-green-700 disabled:opacity-50 disabled:cursor-not-allowed text-white rounded-lg transition-colors",children:g?"Connecting...":"Connect HandCash Wallet"})]})})}a.s(["HandCashConnectPrompt",()=>g,"HandCashOAuthProvider",()=>d,"createHandCashAuthHandler",()=>f,"useHandCash",()=>e])},73062,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_@bsv_sdk_dist_esm_mod_dd929d4b.js"].map(b=>a.l(b))).then(()=>b(51167)))},44045,a=>{a.v(a=>Promise.resolve().then(()=>a(78219)))},17847,a=>{a.v(a=>Promise.resolve().then(()=>a(42301)))},28440,a=>{a.v(a=>Promise.resolve().then(()=>a(31744)))},11693,a=>{a.v(a=>Promise.resolve().then(()=>a(81202)))}]; //# sourceMappingURL=%5Broot-of-the-server%5D__a562bc8e._.js.map

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/b-open-io/bsv-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server